﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Sigos
{
    public partial class frmProdutos : Form
    {
        public frmProdutos()
        {
            InitializeComponent();
        }

        Utilidades util = new Utilidades();

//         private void CarregaCFOP(string CodigoCFOP)
//         {
//             using (SigosEntities Entidades = new SigosEntities())
//             {
//                 try
//                 {
//                     var CFOPs = Entidades.CFOP.Where(Cod => Cod.Codigo == CodigoCFOP).FirstOrDefault();
//                     txtCFOPDescricao.Text = CFOPs.Descricao;
//                     lblInformacao.Text = CFOPs.Informacao;
//                     //cboCFOP.SelectedValue = "5102";
//                 }
//                 catch (System.Exception ex)
//                 {
//                     util.Erro("Não foi possivel selecionar a tabela de CFOP's");
//                 }
//             }
//         }
//         
        private void SalvaRegistro(string vProduto)
        {
            
            using (SigosEntities Entidades = new SigosEntities())
            {
               try
               {
                   if (vProduto == "")
                   {
                       bProgresso.Visible = true;
                       bProgresso.Value = 50;
                       Produtos2 Produtos = new Produtos2();
                       Produtos.CodigoBarras = txtCodigoBarras.Text;
                       Produtos.Descricao = txtDescricao.Text;
                       Produtos.Unidade = cboUnidade.Text;
                       Produtos.Valor = decimal.Parse(txtValor.Text);
                       Produtos.NCM = txtNCM.Text;
                       Produtos.EXTIPI = txtEXTIPI.Text;
                       if (txtGenero.Text != "")
                       {
                           Produtos.Genero = int.Parse(txtGenero.Text);
                       }
                       Produtos.QtdEstoque = int.Parse(txtQtdEstoque.Text);
                       Entidades.AddObject("Produtos2", Produtos);
                       Entidades.SaveChanges();
                       util.Informacao("Registro Salvo com Sucesso");
                       util.LimpaCampos(Controls);
                       bProgresso.Value = 100;
                       bProgresso.Visible = false;
                   }
                   else
                   {
                       int vProdutoI = int.Parse(vProduto.ToString());
                       bProgresso.Visible = true;
                       bProgresso.Value = 50;
                       var Produtos = Entidades.Produtos2.Where(Prod => Prod.CodigoProduto == vProdutoI).FirstOrDefault();
                       Produtos.CodigoBarras = txtCodigoBarras.Text;
                       Produtos.Descricao = txtDescricao.Text;
                       Produtos.Unidade = cboUnidade.Text;
                       Produtos.Valor = decimal.Parse(txtValor.Text);
                       Produtos.NCM = txtNCM.Text;
                       Produtos.EXTIPI = txtEXTIPI.Text;
                       if (txtGenero.Text != "")
                       {
                           Produtos.Genero = int.Parse(txtGenero.Text);
                       }
                       Produtos.QtdEstoque = int.Parse(txtQtdEstoque.Text);
                       //Salvando os dados
                       Entidades.SaveChanges();
                       util.Informacao("Registro Atualizado com Sucesso");
                       util.LimpaCampos(Controls);
                       bProgresso.Value = 100;
                       bProgresso.Visible = false;
                   }
               }
               catch (System.Exception ex)
               {
                   util.Erro("Não foi possivel gravar os dados, verifique os campos e tente novamente, o erro foi: " + ex.Message.ToString());

               }

            }
        }

        private void ExcluirRegistro(string vIDRegistro)
        {
            if (vIDRegistro != "")
            {

                if (util.Excluir() == true)
                {
                    using (SigosEntities Entidades = new SigosEntities())
                    {
                        try
                        {
                            int CodigoProduto = int.Parse(vIDRegistro);
                            var Excluir = Entidades.Produtos2.Where(Pro => Pro.CodigoProduto == CodigoProduto);
                            Entidades.DeleteObject(Excluir);
                            util.Informacao("Registro Excluido com sucesso");
                        }
                        catch (System.Exception ex)
                        {
                            util.Erro("Não foi possivel excluir o registro, o erro foi: " + ex.Message.ToString());
                        }
                    }
                }
            }
            else
            {
                util.Erro("Antes de excluir um registro você deve seleciona-lo!");
            }
        }

        private void CarregaDadosBusca(string vIDProduto)
        {
            if (vIDProduto == "")
            {
                //util.Erro("Não foi possivel carrgar os dados do produto selecionado!");
            }
            else
            {         
            
            using (SigosEntities Entidades = new SigosEntities())
            {
                try
                {
                    int CProduto = int.Parse(vIDProduto);
                    var Registro = Entidades.Produtos2.Where(Cod => Cod.CodigoProduto == CProduto).FirstOrDefault();
                    txtCodigoProduto.Text = Registro.CodigoProduto.ToString();
                    txtCodigoBarras.Text = Registro.CodigoBarras;
                    txtDescricao.Text = Registro.Descricao;
                    cboUnidade.SelectedItem = Registro.Unidade;
                    txtValor.Text = Registro.Valor.ToString();
                    txtNCM.Text = Registro.NCM.ToString();
                    txtEXTIPI.Text = Registro.EXTIPI.ToString();
                    txtGenero.Text = Registro.Genero.ToString();
                    txtQtdEstoque.Text = Registro.QtdEstoque.ToString();
                }
                catch (System.Exception ex)
                {
                    util.Erro("Não foi possivel carrgar os dados do produto selecionado, o erro foi: " + ex.Message.ToString());
                }
            }
            }
        }
        private void frmProdutos_Load(object sender, EventArgs e)
        {
            
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            util.LimpaCampos(Controls);
        }

        private void btnLocalizar_Click(object sender, EventArgs e)
        {
            using (frmBuscarProdutos BuscaProds = new frmBuscarProdutos())
            {
                BuscaProds.ShowDialog();
                CarregaDadosBusca(Utilidades.NumeroPedido);
                Utilidades.NumeroPedido = string.Empty;
                BuscaProds.Dispose();
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                SalvaRegistro(txtCodigoProduto.Text);
            }
            catch
            {

            }
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            ExcluirRegistro(txtCodigoProduto.Text);
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            if (util.Sair() == true)
            {
                this.Close();
            }
        }

        private void frmProdutos_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F2:
                    btnNovo_Click(sender, e);
                    break;
                case Keys.F3:
                    btnLocalizar_Click(sender, e);
                    break;
                case Keys.F4:
                    btnSalvar_Click(sender, e);
                    break;
                case Keys.F5:
                    btnExcluir_Click(sender, e);
                    break;
                case Keys.F6:
                    btnSair_Click(sender, e);
                    break;
            }
        }

        private void txtCodigoBarras_Enter(object sender, EventArgs e)
        {
            lblInformacao.Text = "Informar o GTIN (Global Trade Item Number) do produto, antigo código EAN ou código de barras. Preencher com o código GTIN-8, GTIN-12, GTIN-13 ou GTIN-14 (antigos códigos EAN, UPC e DUN-14), não informar o conteúdo da TAG em caso de o produto não possuir este código.";
        }

        private void txtDescricao_Enter(object sender, EventArgs e)
        {
            lblInformacao.Text = "Informar a descrição do produto ou serviço.";
        }

        private void cboUnidade_Enter(object sender, EventArgs e)
        {
            lblInformacao.Text = "Informar a unidade de comercialização do produto (Ex. pc, und, dz, kg, etc.).";
        }

        private void txtValor_Enter(object sender, EventArgs e)
        {
            lblInformacao.Text = "Informar o valor total bruto do produto ou serviços.";
        }

        private void txtNCM_Enter(object sender, EventArgs e)
        {
            lblInformacao.Text = "informar o Código NCM com 8 dígitos; informar a posição do capítulo do NCM (as duas primeiras posições do NCM) quando a operação não for de comércio exterior (importação/ exportação) ou o produto não seja tributado pelo IPI; se for serviços, informar 00.";
        }

    }
}
